home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / cmln0686.arc / PCTMK.DOC < prev    next >
Text File  |  1986-03-31  |  24KB  |  719 lines

  1.  
  2.  
  3.                               PCTMK
  4.  
  5.                  A tool for program development
  6.  
  7.  
  8.  
  9.                          G. W. Glasscock
  10.                    15617 S. E. Fairwood Blvd.
  11.                        Renton, Wa.  98058
  12.                          (206) 271-0638
  13.  
  14.  
  15.                            Version 1.0
  16.  
  17.    Copyright (c) 1986, G. W. Glasscock,  All rights reserved.
  18.  
  19.  
  20.                            DISCLAIMER
  21.  
  22.    The author has taken due care in preparing this manual and
  23.     accompanying program to ensure it operates as described.
  24. However, the author makes no expressed or implied warranty of any
  25.   kind with regard to this program or the documentation in the
  26.  manual.  Under no circumstances shall the author be liable for
  27.    incidental or consequential damages arising from the use or
  28.                  inability to use this program.
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55. è
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.                                                                  Page 1
  72.  
  73.         INTRODUCTION
  74.  
  75.         PCTMK is a tool for conveniently building a program or a set of
  76.         programs ensuring that the current version of a program reflects
  77.         all changes made to any of the source files comprising that
  78.         program.  It accomplishes this task efficiently by compiling only
  79.         those source files which have been modified.  A command entered
  80.         at the DOS command prompt is used to invoke PCTMK and provide the
  81.         name of the target file to be constructed.  The user supplies the
  82.         detailed knowledge needed to construct the target file through
  83.         rules which he places in a "makefile".
  84.  
  85.         If the modular approach to program development is used, it is
  86.         easy to forget which source files have been modified and which
  87.         source files make up a particular program.  Since the user of
  88.         PCTMK must create a "makefile", he has conveniently documented
  89.         the steps necessary to build his program.
  90.  
  91.         PCTMK provides programmers who use PCDOS [1] and MS-DOS [2] an
  92.         introduction to the capabilities of "make" which was developed by
  93.         S. I. Feldman of Bell Laboratories for the UNIX [3] operating
  94.         system.  PCTMK is intended for use with version 2.0 and later
  95.         releases of PCDOS or MS-DOS.  PCTMK will work with most compilers
  96.         and assemblers which run on these operating systems.
  97.  
  98.         Although PCTMK provides the basic capabilities needed for a
  99.         "make" program, it is missing several advanced features useful in
  100.         a complete "make" program.  PCMK, a superset of PCTMK, provides
  101.         these useful advanced features for only $21.00.
  102.  
  103.                 Wild card character expansion
  104.                 Full path name support
  105.                 User defined macros
  106.                 Access to DOS environment via macros
  107.                 Access to internally generated macros
  108.                 Built-in rules defined by the user
  109.                 Printed manual with examples (40 pages)
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.         1. PCDOS is a Trademark of International Business Machines
  123.         2. MS-DOS is a Trademark of Microsoft Inc.
  124.         3. UNIX is a Trademark of Bell Laboratories
  125.                                                                 Page 2
  126.  
  127.         BASIC OPERATION
  128.  
  129.         The basic function of PCTMK is to produce a target file which is
  130.         current or up-to-date.  It accomplishes this by automatically
  131.         executing all commands necessary to produce the updated target
  132.         file.  A target file is defined as "current" if its date and time
  133.         are more recent than any file on which it depends.
  134.  
  135.         PCTMK determines what needs to be done by examining the "make-
  136.         file".  This "makefile" contains user supplied rules.  These
  137.         rules contain a list of files that a target depends upon and a
  138.         list of the commands necessary to create the target file.  The
  139.         date and time of a file's last modification is obtained from DOS.
  140.         This date and time must be accurate if PCTMK is to operate
  141.         correctly.
  142.  
  143.         As an illustration, suppose a program called "mypgm.exe" is built
  144.         from three assembly language files: "f1.asm", "f2.asm", and
  145.         "f3.asm".  Also, assume that a file of macro definitions
  146.         "mdefs.mac" is "included" in the assembly language files "f2.asm"
  147.         and "f3.asm".  Using only the basic capabilities of PCTMK, the
  148.         four rules shown below describe the "makefile" required to build
  149.         the program "mypgm.exe".
  150.  
  151.             mypgm.exe : f1.obj f2.obj f3.obj
  152.                     link f1.obj f2.obj f3.obj, mypgm.exe, NUL;
  153.  
  154.             f1.obj : f1.asm
  155.                     masm f1.asm;
  156.  
  157.             f2.obj : f2.asm mdefs.mac
  158.                     masm f2.asm;
  159.  
  160.             f3.obj : f3.asm mdefs.mac
  161.                     masm f3.asm;
  162.  
  163.  
  164.         The first rule states that "mypgm.exe" depends on "f1.obj",
  165.         "f2.obj", and "f3.obj".  The second line of this rule is the DOS
  166.         command or program to run if "mypgm.exe" is out of date with any
  167.         of the files on which it it depends.  The second rule states that
  168.         "f1.obj" depends upon "f1.asm" and provides a command to create
  169.         "f1.obj".  Likewise, the third rule states that "f2.obj" depends
  170.         on "f2.asm" and "mdefs.mac".  The second line of this rule is the
  171.         DOS command which will create an updated "f2.obj".  The fourth
  172.         rule is similar to the third rule.
  173.  
  174.         If these four rules are placed in a file named "MAKEFILE", the
  175.         command
  176.  
  177.             PCTMK
  178.  
  179.                                                                  Page 3
  180.  
  181.         is sufficient to cause "mypgm.exe" to be recreated after a change
  182.         had been made to any of the source files, "f1.asm", "f2.asm",
  183.         "f3.asm", or "mdef.mac".
  184.  
  185.         Let's assume that after running "mypgm", it is determined that a
  186.         modification to the file "f2.asm" is necessary to correct a
  187.         problem.  After making this modification, PCTMK is executed.
  188.         From the four rules in "MAKEFILE" and the date and times of the
  189.         target and dependency files, PCTMK discovers that "f2.asm" has
  190.         been modified and executes the command associated with rule 3.
  191.         The command associated with rule 1 will then be executed because
  192.         "f2.obj" is now out of date.  The commands associated with rules
  193.         2 or 4 are not executed because the targets in these rules are
  194.         current with their dependency files.
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.                                                                 Page 4
  234.  
  235.         MAKEFILE SYNTAX
  236.  
  237.         The overall syntax of a "makefile" is relatively simple.  It
  238.         contains lines of ASCII text by which the user can construct
  239.         rules.  A rule is an entry in the "makefile" which states depend-
  240.         ency condition(s).  It also defines actions to be taken should
  241.         that condition be met.  Blank lines are allowed between rules.
  242.  
  243.         The sharp "#" character is used to start a comment.  When a sharp
  244.         "#" is found, the line is effectively ended because the sharp and
  245.         all characters following the sharp up to the end-of-line are
  246.         ignored.  If it is necessary to use a sharp in a rule, it can be
  247.         "escaped"; the sequence "\#" is replaced by a sharp and does not
  248.         signify the start of a comment.
  249.  
  250.         Non-comment lines may be continued by placing a backslash "\"
  251.         character at the end of the line.  In this case, the backslash
  252.         followed by an end-of-line is ignored so that the first character
  253.         of the next line immediately follows the character which preceded
  254.         the backslash.
  255.  
  256.         To define a rule within the "makefile", use the following syntax:
  257.  
  258.         target : [dependent ... ] [; command]
  259.         [(tab) command]
  260.             ...
  261.  
  262.         Items inside brackets are optional and may be omitted.  The
  263.         appearance of three dots "..." means that the previous item may
  264.         be repeated.  Targets and dependents are strings of letters,
  265.         digits, and special characters delimited by white space.  White
  266.         space must both precede and follow the colon.  White space is
  267.         defined as one or more blanks or tab characters.  Targets and
  268.         dependents can appear in more than one rule.
  269.  
  270.         Because targets and dependents refer to DOS file names which may
  271.         or may not exist, you would be wise to restrict your use of
  272.         special characters to those which can be used in valid DOS file
  273.         names.
  274.  
  275.         A command is any string of characters terminating with an
  276.         unescaped sharp "#" or the end-of-line sequence.  Usually com-
  277.         mands appear on separate lines which begin with a tab character.
  278.         However, one command may be placed at the end of a target/
  279.         dependency line if it is preceded by a semicolon.  The commands
  280.         of a rule are executed in the order of appearance provided at
  281.         least one of the dependents is more recent than the target.
  282.  
  283.         The first string in a DOS command line identifies the file/
  284.         command to be executed.  Three types of files, ".COM", ".EXE",
  285.         and ".BAT", as well as commands which are internal to the DOS
  286.         command line processor, can be run under DOS.  PCTMK handles all
  287.                                                                  Page 5
  288.  
  289.         of these commands.  It is not necessary to provide the suffix of
  290.         the command to be run.  The syntax of the command should conform
  291.         to DOS conventions, but depends to a large extent upon the
  292.         command being executed.
  293.  
  294.         A comment may be placed at the end of a target or command line by
  295.         using the sharp "#" to signal the start of the comment.  Both
  296.         target lines and command lines that do not end with a comment may
  297.         be continued.
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.                                                                 Page 6
  342.  
  343.         PCTMK COMMAND
  344.  
  345.         pctmk [-f makefile] [-s] [-i] [-n] [names]
  346.  
  347.         Any or all of the command line parameters may be omitted.  The
  348.         sequence in which parameters are entered has no significance for
  349.         their meaning.  Command line parameters are of two types: options
  350.         and target names.  The case of the characters on the command line
  351.         is not significant.
  352.  
  353.         Options
  354.  
  355.         The four PCTMK options are:
  356.  
  357.             -f "makefile"  is the name of a file which contains the rules
  358.                 that you want PCTMK to process.  If this option is
  359.                 omitted, PCTMK uses the file "MAKEFILE" in the current
  360.                 directory.
  361.  
  362.             -s  specifies that PCTMK call the system's command processor
  363.                 "COMMAND.COM" to execute all commands.
  364.  
  365.             -i  requests that error codes returned by commands be
  366.                 ignored.  Normally, PCTMK aborts when a command it
  367.                 executes generates an error return.  When this option is
  368.                 present, it will continue processing.  This option is
  369.                 useful when working with commands that set the "exit"
  370.                 code incorrectly.
  371.  
  372.             -n  requests that PCTMK only print the commands that would be
  373.                 executed but not execute them.  This option allows you to
  374.                 see what commands PCTMK would issue without actually
  375.                 executing them.
  376.  
  377.         Target Names  [names]
  378.  
  379.         For each target name present on the command line, PCTMK attempts
  380.         to create an updated version of that target.  If no targets are
  381.         present on the command line, the first target found in the
  382.         "makefile" will be updated.
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.                                                                  Page 7
  396.  
  397.         OPERATIONAL DETAILS
  398.  
  399.         The information provided in this section will help you understand
  400.         the operation of PCTMK so that you can better take advantage of
  401.         this tool.
  402.  
  403.         Command Execution
  404.  
  405.         PCTMK provides two options for executing or running commands.
  406.         Direct execution is the preferable method because PCTMK can
  407.         access the exit code of the DOS command it executes and halt when
  408.         that command (i.e. a compiler or assembler) detects errors.  Of
  409.         course, access to the exit code is useless unless it is set
  410.         accurately by the command being executed.
  411.  
  412.         You may provide the full path name for a file to be executed.  If
  413.         only the command name is given, PCTMK tries to locate a command
  414.         by first looking in the current directory, then in the
  415.         directories identified by the DOS environment variable, PATH.
  416.         The full path name is necessary to execute a command which is not
  417.         in the current directory or in a directory identified by the
  418.         environment PATH variable.
  419.  
  420.         Commands can also be executed by first calling the DOS command
  421.         line interpreter which will then execute the command.  There are
  422.         three reasons PCTMK uses this method for executing commands.
  423.         Since some commands are internal to the DOS command processor or
  424.         have special syntactical conventions, they must be executed by
  425.         the DOS command line processor.  Appendix A contains a list of
  426.         the commands PCTMK always executes via the DOS command line
  427.         processor.  PCTMK does not itself handle redirection of input,
  428.         redirection of output, or pipes.  If a command line contains any
  429.         of the characters "<", ">", or "|", that command line is executed
  430.         via the DOS command line processor.  Any command which has a
  431.         ".BAT" suffix is executed via the DOS command line processor.
  432.         The problem with executing commands via the DOS command processor
  433.         is that the exit code of the command is not available to PCTMK.
  434.  
  435.         PCTMK WILL CONTINUE NORMALLY WHEN A COMMAND EXECUTED BY THE DOS
  436.         COMMAND LINE INTERPRETER ABORTS BECAUSE PCTMK IS NOT INFORMED OF
  437.         THIS ABNORMAL CONDITION.
  438.  
  439.         By using the "-s" option, you can force PCTMK to call the DOS
  440.         command line processor to execute all commands.
  441.  
  442.         Size of Commands
  443.  
  444.         DOS restricts the parameter portion of a command line to 126
  445.         characters.  If the command is to be executed via the command
  446.         line processor, the complete command may not exceed 123
  447.         characters.  Several techniques have been developed to cope with
  448.         this limit.  Some of the DOS commands, (i.e.  copy and backup)
  449.                                                                 Page 8
  450.  
  451.         avoid this problem by expanding wild card characters as a part of
  452.         the command.  "LINK" allows parameters to be input from a file as
  453.         an alternative to the DOS command line.  For some commands,
  454.         simply running the command multiple times will avoid this limit.
  455.  
  456.         PCTMK helps cope with this situation by allowing one target to
  457.         appear in multiple rules.  For each rule the commands associated
  458.         with that rule are executed if the target is out of date with any
  459.         of the dependencies of that rule.
  460.  
  461.         Support of Path Names
  462.  
  463.         PCTMK allows all file names to include a full path qualifier.
  464.         However, some assemblers and compilers do not allow file names
  465.         which include a path.  This is universally true for compilers and
  466.         assemblers which were produced before DOS 2.0 was available.
  467.         Even the DOS 2.0 command processor has restrictions on the use of
  468.         file names which contain a path prefix.
  469.  
  470.         Lower Case vs Upper Case
  471.  
  472.         Where possible PCTMK maintains the distinction between upper and
  473.         lower case letters.  That is the string "abcd" is not identical
  474.         to the string "ABCD".  However, PCTMK must deal with DOS which
  475.         converts the lower case letters to upper case in file names.  As
  476.         a result, lower case letters in target names are converted to
  477.         uppercase.
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.                                                                  Page 9
  504.  
  505.         EXAMPLE OF USAGE
  506.  
  507.         The previous sections have described the basic operation of
  508.         PCTMK, the syntax of the "makefile", and the command line used to
  509.         invoke PCTMK.  This section presents an example using PCTMK and a
  510.         product from C Ware.  The "makefile" illustrated here uses an
  511.         assembler and a "C" compiler.  This "makefile" happens to be the
  512.         one used to develop PCTMK.
  513.  
  514.         #   Rule 1
  515.         pctmk.exe : pcmk.o parser.o builtin.o ffind.o fetenv.o
  516.                 bind pcmk.o parser.o builtin.o ffind.o fetenv.o a:exec.o \
  517.         -opctmk -p -s4000
  518.  
  519.         #   Rule 2
  520.         pcmk.o : pcmk.c defs.h
  521.                 c88 pcmk.c
  522.  
  523.         #   Rule 3
  524.         parser.o : parser.c defs.h
  525.                 c88.exe parser.c
  526.  
  527.         #   Rule 4
  528.         builtin.o : builtin.c  defs.h
  529.                 c88 builtin.c
  530.  
  531.         #   Rule 5
  532.         ffind.o : ffind.a
  533.                 asm88 ffind.a
  534.  
  535.         #   Rule 6
  536.         fetenv.o : fetenv.a
  537.                 asm88 fetenv.a
  538.  
  539.  
  540.         Rule 1 describes how to build "pctmk.exe".  Because this is the
  541.         first target in the "makefile", it is chosen whenever a target is
  542.         omitted from the PCTMK command line.  The dependency part of this
  543.         rule list the five (5) object files on which "pctmk.exe" depends
  544.         that are subject to change.
  545.  
  546.         The second line of this rule starts with a tab and is the command
  547.         to run if one or more of the dependencies are out-of-date with
  548.         "pctmk.exe".  This line is continued because the backslash "\" at
  549.         the end of the line immediately precedes the end-of-line
  550.         sequence.  When this command is executed PCTMK looks for "bind"
  551.         in the current directory, then the directories specified by the
  552.         environment variable PATH.  The parameters for this command are
  553.         the object files on which "pctmk.exe" depends, "a:exec.o" and the
  554.         three option flags.  The "-o" option supplies the name for the
  555.         output of "bind".  The file "a:exec.o", which is part of the
  556.         compiler package, is needed to construct "pctmk.exe".  It is not
  557.                                                                 Page 10
  558.  
  559.         necessary to include this file in the dependency list since it
  560.         does not change.
  561.  
  562.         Before deciding to execute the command in rule 1, PCTMK must
  563.         ensure that all of the dependents are also current.  To do this,
  564.         PCTMK attempts to "make" each of the dependents.  It will find
  565.         rules for each of these sub-targets.  Rule 2 states that "pcmk.o"
  566.         depends upon "pcmk.c" and "defs.h".  If either of the files
  567.         "pcmk.o" or "defs.h" are out-of date with "pcmk.o", the command
  568.         which is the second line of rule 2 will be run to re-build
  569.         "pcmk.o".  Rules 3 and 4 are similar to rule 2.  Note that the
  570.         full name of the compiler, "c88.exe", is present in the command
  571.         portion of rule 3.
  572.  
  573.         Rule 5 states that "ffind.o" depends upon "ffind.a".  If
  574.         "ffind.o" is out-of-date with "ffind.a" the command show in the
  575.         second line of this rule will be executed.  Rule 6 is similar to
  576.         rule 5.
  577.  
  578.         You should be aware that PCTMK will try to "make" all of the file
  579.         names which it encounters in a dependency list.  Even the source
  580.         files: "pcmk.c", "parser.c", "builtin.c", "ffind.a", "fetenv.a",
  581.         and "defs.h".  The attempt to "make" these source files will not
  582.         succeed because there are no rules present that create these
  583.         source files.  Because of this feature, PCTMK will work in
  584.         environments where program generators and precompilers are used.
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.                                  Appendix A                     Page 11
  612.  
  613.         DOS COMMANDS
  614.  
  615.         The commands listed below are always executed via the DOS command
  616.         processor.  The exit code is not available to PCMK when the DOS
  617.         command processor is called to execute a command.
  618.  
  619.                     backup                  break
  620.                     chdir                   cd
  621.                     chkdsk                  cls
  622.                     comp                    copy
  623.                     ctty                    date
  624.                     del                     erase
  625.                     dir                     echo
  626.                     for                     if
  627.                     mkdir                   md
  628.                     more                    pause
  629.                     print
  630.                     ren                     rename
  631.                     restore
  632.                     rmdir                   rd
  633.                     sort                    time
  634.                     type                    ver
  635.                     verify                  vol
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.                                  Appendix B                     Page 12
  666.  
  667.         DISTRIBUTION OF PCTMK
  668.  
  669.         PCTMK and its document is available at no cost to those who want
  670.         to use it.  Please help distribute this software by copying both
  671.         the program and the electronic form of the manual for anyone who
  672.         may want to use this program.  The only restriction on copying
  673.         this software is that the electronic form of the manual be copied
  674.         along with the program, and that neither the program nor the
  675.         manual be modified in any way.  I have placed PCTMK on several
  676.         computer bulletin boards and I hope it will spread to additional
  677.         bulletin boards.  PCTMK is not directly available from the
  678.         author.  Copies of PCTMK must be obtained from either a bulletin
  679.         board or a friend.
  680.  
  681.         My motivation for making this program available at no cost is to
  682.         help market PCMK which is a superset of PCTMK and provides the
  683.         user many useful and convenient features.
  684.  
  685.             -    Wild card character expansion
  686.             -    Full path name support
  687.             -    User defined macros
  688.             -    Access to DOS environment via macros
  689.             -    Access to internally generated macros
  690.             -    Built-in rules defined by the user
  691.             -    Printed manual with examples (40 pages)
  692.  
  693.         A copy of PCMK and its 40 page printed manual are available from
  694.         the author for $21.00.  A check or money order for the full
  695.         amount of the order must accompany all orders.  Washington state
  696.         residents include 8.1% sales tax.
  697.  
  698.         G. W. Glasscock
  699.         15617 S. E. Fairwood Blvd.
  700.         Renton, Wa.  98058
  701.         (206) 271-0638
  702.  
  703.         Because of the low cost of this product, I will not be able to
  704.         return your long distance telephone calls.  However, I am willing
  705.         to talk with you if you pay for the call.  I am available most
  706.         evenings 6:00 PM to 9:00 PM PST.  I will answer all mail that I
  707.         receive concerning PCMK or PCTMK.
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.